package com.zl.cms.dao;

import com.zl.basic.dao.IBaseDao;
import com.zl.basic.model.Pager;
import com.zl.cms.model.*;

import java.util.List;

/**
 * User: zl email:c3tc3tc3t@126.com Date: 14-1-14 Time: 上午11:58
 */
public interface IUserDao extends IBaseDao<User> {


  /**
   * 获取用户所处的所有角色对象
   * 
   * @param userid 用户id
   * @return 角色对象列表
   */
  public List<Role> listUserRoles(int userid);

  /**
   * 获取用户所处角色的id
   * 
   * @param userid 用户id
   * @return 角色对象id列表
   */
  public List<Integer> listUserRoleIds(int userid);


  /**
   * 获取用户所在的组信息
   * 
   * @param userid 用户id
   * @return 用户所在的组列表
   */
  public List<Group> listUserGroups(int userid);

  /**
   * 获取用户所在组的id
   * 
   * @param userid 用户id
   * @return 用户所在的组的id列表
   */
  public List<Integer> listUserGroupsIds(int userid);

  /**
   * 根据用户id和角色id获取用户角色关联对象
   * 
   * @param userid 用户id
   * @param roleid 角色id
   * @return 用户对象和角色对象关联对象
   */
  public UserRole loadUserRole(int userid, int roleid);


  /**
   * 根据用户id和组id获取用户和组关联对象
   * 
   * @param userid 用户id
   * @param groupid 组id
   * @return 用户和组的关联对象
   */
  public UserGroup loadUserGroup(int userid, int groupid);


  /**
   * 根据用户名获取用户对象
   * 
   * @param username 用户帐号名
   * @return 用户对象
   */
  public User loadByUsername(String username);

  /**
   * 根据用户角色id获取用户对象列表
   * 
   * @param roleid 用户角色id
   * @return 用户对象列表
   */
  public List<User> listUsersByRoleId(int roleid);

  /**
   * 根据角色类型获取用户对象列表
   * 
   * @param roletype 角色类型
   * @return 用户对象列表
   */
  public List<User> listUsersByRoleType(RoleType roletype);


  /**
   * 更具组id获取用户对象列表
   * 
   * @param groupid 组id
   * @return 用户对象列表
   */
  public List<User> listUsersByGroupId(int groupid);

  /**
   * 添加用户角色关系对象
   * 
   * @param user 用户对象
   * @param role 角色对象
   */
  public void addUserRole(User user, Role role);

  /**
   * 添加用户和组关系对象
   * 
   * @param user 用户对象
   * @param group 组对象
   */
  public void addUserGroup(User user, Group group);

  /**
   * 删除用户和角色关联关系
   * 
   * @param uid 用户id
   */
  public void deleteUserRole(int uid);

  /**
   * 删除用户和组关联关系
   * 
   * @param uid 用户id
   */
  public void deleteUserGroup(int uid);

  /**
   * 列表出所有用户
   * 
   * @return 分页对象包含用户列表
   */
  public Pager<User> findUser();

  /**
   * 检查用户对象是否存在
   * 
   * @param id 用户id
   */
  public void checkObjectNull(int id);

	/**
	 * 删除用户角色关系对象
	 * @param uid 用户id
	 * @param rid 角色id
	 */
  public void deleteUserRole(int uid, int rid);

	/**
	 * 删除用户和组关系对象
	 * @param uid 用户id
	 * @param gid 组id
	 */
  public void deleteUserGroup(int uid, int gid);
}
